Node.js Error Handling

শক্তিশালী Node.js অ্যাপ্লিকেশন তৈরি করতে ত্রুটি পরিচালনার গুরুত্ব বুঝুন

কেন ত্রুটি পরিচালনা?

যে কোনও প্রোগ্রামে ত্রুটিগুলি অনিবার্য, তবে আপনি কীভাবে সেগুলি পরিচালনা করেন তা সমস্ত পার্থক্য করে। Node.js-এ, সঠিক ত্রুটি পরিচালনা করা গুরুত্বপূর্ণ কারণ:

আকস্মিক শাটডাউন প্রতিরোধ করে

অ্যাপ্লিকেশানগুলিকে অপ্রত্যাশিতভাবে ক্র্যাশ হওয়া থেকে আটকায়৷

ব্যবহারকারীদের জন্য অর্থপূর্ণ প্রতিক্রিয়া

ব্যবহারকারীদের অর্থপূর্ণ প্রতিক্রিয়া প্রদান করে

ডিবাগিং সহজ করে তোলে

সঠিক ত্রুটি প্রসঙ্গের সাথে ডিবাগ করার সুবিধা দেয়

উৎপাদনে ধারাবাহিকতা

উত্পাদনে প্রয়োগের ধারাবাহিকতা বজায় রাখতে সহায়তা করে

Node.js-এ সাধারণ ত্রুটির ধরন

বিভিন্ন ত্রুটির ধরন বোঝা আপনাকে সেগুলিকে সঠিকভাবে মোকাবেলা করতে সহায়তা করে:

1. জাভাস্ক্রিপ্ট ত্রুটি সংশোধন করা হয়েছে

// SyntaxError
JSON.parse('{invalid json}');

// TypeError
null.someProperty;

// ReferenceError
unknownVariable;

2. কম্পিউটারের ত্রুটি

// ENOENT: No such file or directory
const fs = require('fs');
fs.readFile('nonexistent.txt', (err) => {
  console.error(err.code); // 'ENOENT'
});

// ECONNREFUSED: Connection refused
const http = require('http');
const req = http.get('http://nonexistent-site.com', (res) => {});
req.on('error', (err) => {
  console.error(err.code); // 'ECONNREFUSED' or 'ENOTFOUND'
});

মৌলিক ত্রুটি হ্যান্ডলিং

Node.js :

ত্রুটি-প্রথম কলব্যাক

Node.js , ( ).

উদাহরণ: ত্রুটি-প্রথম কলব্যাক

const fs = require('fs');

function readConfigFile(filename, callback) {
  fs.readFile(filename, 'utf8', (err, data) => {
    if (err) {
      // Handle specific error types
      if (err.code === 'ENOENT') {
        return callback(new Error(`Config file ${filename} not found`));
      } else if (err.code === 'EACCES') {
        return callback(new Error(`No permission to read ${filename}`));
      }
      // For all other errors
      return callback(err);
    }

    // Process data if no error
    try {
      const config = JSON.parse(data);
      callback(null, config);
    } catch (parseError) {
      callback(new Error(`Invalid JSON in ${filename}`));
    }
  });
}

// Usage
readConfigFile('config.json', (err, config) => {
  if (err) {
    console.error('Failed to read config:', err.message);
    // Handle the error (e.g., use default config)
    return;
  }
  console.log('Config loaded successfully:', config);
});

আধুনিক ত্রুটি পরিচালনা

ব্যবহার করে দেখুন... Async/অপেক্ষা করুন

অ্যাসিঙ্ক/অপেক্ষা করে, আপনি সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস কোড উভয়ের জন্য চেষ্টা/ক্যাচ ব্লক ব্যবহার করতে পারেন:

উদাহরণ: Async/অপেক্ষা করে দেখুন/ক্যাচ করুন

const fs = require('fs').promises;

async function loadUserData(userId) {
  try {
    const data = await fs.readFile(`users/${userId}.json`, 'utf8');
    const user = JSON.parse(data);

    if (!user.email) {
      throw new Error('Invalid user data: missing email');
    }

    return user;
  } catch (error) {
    // Handle different error types
    if (error.code === 'ENOENT') {
      throw new Error(`User ${userId} not found`);
    } else if (error instanceof SyntaxError) {
      throw new Error('Invalid user data format');
    }
    // Re-throw other errors
    throw error;
  } finally {
    // Cleanup code that runs whether successful or not
    console.log(`Finished processing user ${userId}`);
  }
}

// Usage
(async () => {
  try {
    const user = await loadUserData(123);
    console.log('User loaded:', user);
  } catch (error) {
    console.error('Failed to load user:', error.message);
    // Handle error (e.g., show to user, retry, etc.)
  }
})();

গ্লোবাল এরর হ্যান্ডলিং

ধরা পড়া ব্যতিক্রম

অপ্রত্যাশিত ত্রুটির জন্য, আপনি প্রস্থান করার আগে পরিষ্কারের জন্য uncaughtException কল করতে পারেন:

উদাহরণ: গ্লোবাল এরর হ্যান্ডলার

// Handle uncaught exceptions (synchronous errors)
process.on('uncaughtException', (error) => {
  console.error('UNCAUGHT EXCEPTION! Shutting down...');
  console.error(error.name, error.message);

  // Perform cleanup (close database connections, etc.)
  server.close(() => {
    console.log('Process terminated due to uncaught exception');
    process.exit(1); // Exit with failure
  });
});

// Handle unhandled promise rejections
process.on('unhandledRejection', (reason, promise) => {
  console.error('UNHANDLED REJECTION! Shutting down...');
  console.error('Unhandled Rejection at:', promise, 'Reason:', reason);

  // Close server and exit
  server.close(() => {
    process.exit(1);
  });
});

// Example of an unhandled promise rejection
Promise.reject(new Error('Something went wrong'));

// Example of an uncaught exception
setTimeout(() => {
  throw new Error('Uncaught exception after timeout');
}, 1000);

সর্বোত্তম অনুশীলন পরিচালনার ত্রুটি৷

করণীয় জিনিস

যথাযথভাবে ত্রুটিগুলি পরিচালনা করুন
যথেষ্ট প্রসঙ্গ সহ ত্রুটিগুলি লগ করুন৷
বিভিন্ন পরিস্থিতিতে কাস্টম ত্রুটি প্রকার ব্যবহার করুন
অবশেষে মডিউলগুলিতে সংস্থানগুলি পরিষ্কার করুন
দ্রুত ত্রুটি ধরতে ইনপুট চেক করুন

এটা করবেন না

ত্রুটিগুলি উপেক্ষা করুন (খালি ক্যাচ ব্লক)
গ্রাহকদের কাছে সংবেদনশীল ত্রুটির বিবরণ প্রকাশ করুন
প্রবাহ নিয়ন্ত্রণের জন্য চেষ্টা/ক্যাচ ব্যবহার করুন
তাদের লগিং ছাড়া ত্রুটি গিলে
পুনরুদ্ধারযোগ্য ত্রুটির পরে অপারেশন চালিয়ে যান

কাস্টম ত্রুটি প্রকার

class ValidationError extends Error {
  constructor(message, field) {
    super(message);
    this.name = 'ValidationError';
    this.field = field;
    this.statusCode = 400;
  }
}

class NotFoundError extends Error {
  constructor(resource) {
    super(`${resource} not found`);
    this.name = 'NotFoundError';
    this.statusCode = 404;
  }
}

// Usage
function getUser(id) {
  if (!id) {
    throw new ValidationError('User ID is required', 'id');
  }
  // ...
}

সারাংশ

কার্যকরী ত্রুটি হ্যান্ডলিং শক্তিশালী Node.js অ্যাপ্লিকেশন তৈরির একটি মূল দিক।

বিভিন্ন ধরনের ত্রুটি বোঝার মাধ্যমে, উপযুক্ত পদ্ধতি ব্যবহার করে এবং সর্বোত্তম অনুশীলন অনুসরণ করে, আপনি আরও স্থিতিশীল, রক্ষণাবেক্ষণযোগ্য এবং ব্যবহারকারী-বান্ধব অ্যাপ্লিকেশন তৈরি করতে পারেন।

ডাউনটাইম প্রতিরোধ করে

আকস্মিক বিভ্রাট প্রতিরোধ করে

অর্থবহ মন্তব্য

ব্যবহারকারীদের অর্থপূর্ণ প্রতিক্রিয়া প্রদান করে

ডেটা অখণ্ডতা

ডেটা অখণ্ডতা বজায় রাখে

ব্যবহারকারীর অভিজ্ঞতা

সমস্যা দেখা দিলেও ভালো ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করে

💎মূল পয়েন্ট:

  • ভাল ত্রুটি পরিচালনার অর্থ কেবল ক্র্যাশ প্রতিরোধ করা নয়
  • এর মধ্যে অর্থপূর্ণ প্রতিক্রিয়া প্রদান, ডেটা অখণ্ডতা বজায় রাখা এবং সমস্যা দেখা দিলেও একটি ভাল ব্যবহারকারীর অভিজ্ঞতা নিশ্চিত করা অন্তর্ভুক্ত
  • বিভিন্ন ত্রুটির ধরন বুঝুন এবং উপযুক্ত পদ্ধতি প্রয়োগ করুন
  • সর্বদা শেষ মডিউলগুলিতে সংস্থানগুলি পরিষ্কার করুন
  • কাস্টম ত্রুটি প্রকারগুলি আরও ভাল ত্রুটি পরিচালনা করতে সহায়তা করে

অনুশীলন করুন

সঠিক শব্দ চয়ন করুন।

Node.js , ______মডিউল দিয়ে ম্যানিপুলেট করা যায়।

if...else
✗ ভুল! যদি...অন্যথায় ব্লকগুলি শর্তযুক্ত যুক্তির জন্য ব্যবহার করা হয়, ত্রুটি পরিচালনার জন্য নয়
try...catch
✓ ঠিক আছে! try...catch মডিউল Node.js-এ সিঙ্ক্রোনাস এবং অ্যাসিঙ্ক্রোনাস ত্রুটিগুলি পরিচালনা করতে ব্যবহৃত হয়
switch...case
✗ ভুল! সুইচ...কেস ব্লকগুলি অনেক শর্তসাপেক্ষ শাখার জন্য ব্যবহৃত হয়, ত্রুটি পরিচালনার জন্য নয়
for...in
✗ ভুল! for...in ব্লকগুলি বস্তুর বৈশিষ্ট্যের মাধ্যমে পুনরাবৃত্তি করার জন্য ব্যবহৃত হয়, ত্রুটি পরিচালনার জন্য নয়